// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package x86

// argListMax指定预期由obj携带的arg计数上限。掠夺。
// Max len（obj.Prog.RestArgs）可以由此推断为4。
const argListMax int = 6

type argList [argListMax]uint8

type ytab struct {
	zcase   uint8
	zoffset uint8

	// 最后一个参数通常是目的地。
	// 对于一元指令，unaryDst用于确定
	// 单个参数是源还是目标。
	args argList
}

// 如果yt与args兼容，则返回true。
// 
// 来自args和yt的元素。args用于索引ycover表，比如'ycover[args[i]+yt。args[i]`。
// 这意味着参数应该包含已经被Ymax乘以的值。
func (yt *ytab) match(args []int) bool {
	// 需要进行后续Yxxx检查，以避免出现匹配较短参数列表的情况。如果我们有确切的yt。args长度，可能是'yt。argc！=len（args）`。
	if len(args) < len(yt.args) && yt.args[len(args)] != Yxxx {
		return false
	}

	for i := range args {
		if ycover[args[i]+int(yt.args[i])] == 0 {
			return false
		}
	}

	return true
}
